
package com.x52im.rbchat.logic.chat_friend.gift;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.eva.android.widget.DataLoadableActivity;
import com.eva.android.widget.AListAdapter2;
import com.eva.framework.dto.DataFromServer;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.x52im.rbchat.R;
import com.x52im.rainbowchat.http.logic.dto.TimeToolKit;
import com.x52im.rbchat.network.http.HttpRestHelper;
import com.x52im.rbchat.logic.chat_friend.gift.model.GiftHistory;
import com.x52im.rbchat.logic.chat_friend.gift.model.GiftsMeta;
import com.x52im.rbchat.utils.IntentFactory;

import java.util.ArrayList;
import java.util.Vector;

public class GiftsHistoryActivity extends DataLoadableActivity
{
	private HistoryListAdapter lvGiftHistoryAdapter;
	private ListView giftHistoryListView;
	
	private String localUid;
	private String gifIdent;
	
	/**
	 * 本方法由父类的onCreate()调用，子类可在此方法中实现自已的UI显示逻辑。
	 */
	@Override
	protected void initViews(Bundle savedInstanceState)
	{
		customeTitleBarResId = R.id.chatting_gift_history_titleBar;
		// 首先设置contentview
		setContentView(R.layout.chatting_gift_history);

		this.setTitle(R.string.chatting_gift_history_title);
		
		giftHistoryListView = (ListView) this.findViewById(R.id.chatting_gift_history_list_view);
		lvGiftHistoryAdapter = new HistoryListAdapter(this);
		giftHistoryListView.setAdapter(lvGiftHistoryAdapter);
	}

	/**
	 * 本方法由父类的onCreate()调用，子类可在此方法中为各UI功能组件增加事件临听。
	 */
	@Override
	protected void initListeners()
	{

	}
	
	@Override
	protected void initDataFromIntent()
	{
		ArrayList datas = IntentFactory.parseGiftHistoryIntent(getIntent());
		localUid = (String) datas.get(0);
		gifIdent = (String) datas.get(1);
	}
	
	@Override
	protected DataFromServer queryData(String... arg0)
	{
//		StringBuilder sb = new StringBuilder()
//			.append("select a.my_gift_rec_id,a.user_uid,a.from_user_uid,a.get_time ")
//			.append("	,a.get_time2,a.src_consume_id,a.gift_ident ")
//			.append("	,b.nickname,c.price,c.res_drawable_id ")
//			.append("from ")
//			.append("(")
//			.append("	select my_gift_rec_id,user_uid,from_user_uid,get_time,get_time2,src_consume_id,gift_ident ")
//			.append("	from missu_gifts_mine ")
//			.append("	where user_uid=" + localUid + " and gift_ident='" + gifIdent + "' ")
//			.append(") a ")
//			.append("left join missu_users b on a.user_uid=b.user_uid ")
//			.append("left join missu_gifts c on a.gift_ident=c.gift_ident ")
//			.append("order by a.get_time2 desc ");
//
//		return AToolKits.queryDataRoot(HttpServiceFactory4AImpl.getInstance().getDefaultService()
//				, sb.toString());
		return HttpRestHelper.queryUserGifHistoryFromServer(localUid, gifIdent);
	}

	@Override
	protected void refreshToView(Object result)
	{
//		Vector<Vector> vec = (Vector<Vector>) result;
		Vector<Vector> vec = new Gson().fromJson((String)result
				, new TypeToken<Vector<Vector>>(){}.getType()); ;
		ArrayList<GiftHistory> datas = new ArrayList<GiftHistory>();
		if(vec.size() > 0)
		{
			for(Vector row : vec)
			{
				int j = 0;
				GiftHistory h = new GiftHistory();
				h.setMy_gift_rec_id((String)row.get(j++));
				h.setUser_uid((String)row.get(j++));
				h.setFrom_user_uid((String)row.get(j++));
				h.setGet_time((String)row.get(j++));
				h.setGet_time2((String)row.get(j++));
				h.setSrc_consume_id((String)row.get(j++));
				h.setGift_ident((String)row.get(j++));
				h.setFriendNickName((String)row.get(j++));
				h.setPrice((String)row.get(j++));
				h.setRes_drawable_id((String)row.get(j++));
				datas.add(h);
			}
		}
		lvGiftHistoryAdapter.setListData(datas);
		lvGiftHistoryAdapter.notifyDataSetChanged();
//		Utility.setListViewHeightBasedOnChildren(rechangeHistoryListView);
	}
	
	
	private class HistoryListAdapter extends AListAdapter2<GiftHistory>
	{

		public HistoryListAdapter(Activity context)
		{
			super(context, R.layout.chatting_gift_history_list_item);
		}

		@Override
		public View getView(final int position, View convertView, ViewGroup parent)
		{
			ImageView viewIcon = null;
			TextView viewNickname = null;
			TextView viewGiveTime = null;
			TextView viewDesc = null;

			// ----------------------------------------------------------------------------------------
			// （1）UI初始化
			// 当的item布局实例已经存在（不在存，意味着这个item刚好从不可见区移到可见区时）
			// ** 根据android的列表ui实现，为了节比资源占用，假如列表有100行而可见区显示5行，那么任何时候
			// ** 这个列表中只会有5个item的UI存在，其它的item都是当被转到可见区时自动把自
			// ** 已的数据实时地更新列UI上，以便查看，也就是说item的UI并不是与后台数据一
			// ** 一对应的，所以正如API文档里说的，convertView并不能确保它总能按你的想法保持不为null
			boolean needCreateItem = (convertView == null);
			// 正在操作的列表行的数据集
			final GiftHistory rowData = listData.get(position);
			if (needCreateItem)
				// 明细item的UI实例化
				convertView = layoutInflater.inflate(itemResId, null);
			// item里的操作组件实例
			viewIcon = (ImageView) convertView.findViewById(R.id.chatting_gift_history_list_item_imageView);
			viewNickname = (TextView) convertView.findViewById(R.id.chatting_gift_history_list_item_nickname);
			viewGiveTime = (TextView) convertView.findViewById(R.id.chatting_gift_history_list_item_givetime);
			viewDesc = (TextView) convertView.findViewById(R.id.chatting_gift_history_list_item_desc);

			// ----------------------------------------------------------------------------------------
			// （2）增加事件处理器
			// 各操作组件的事件监听器只需要在convertView被实例化时才需要重建（convertView需要被实例化
			// 当然就意味着它上面的所有操作组件都已经重新新建了）
			// ** 关于事件处理器的说明：事件处理器的增加其实可以不这么麻烦，直接每getView一次就给组件new一个处理器，
			// ** 这样做的好处是简单，但显然存在资源浪费（每刷新一次view就新建监听器）。而现在的实现就跟Android的列表
			// ** 实现原理一样，在切换到下一组item前，监听器永远只有一屏item的数量（刷新时只需要即时刷新对应item的数据到
			// ** 它的监听器里），这样就节省了资源开销！
			if (needCreateItem)
			{
				//
			}

			// ----------------------------------------------------------------------------------------
			// （3）
			// 给标签设置值，以供用户查看
//			viewIcon.setBackgroundResource(R.drawable.chatting_gift_history_list_item_icon);
			GiftsMeta.showGiftDrawable(context, viewIcon, rowData.getRes_drawable_id());
			viewNickname.setText(rowData.getFriendNickName());
			viewGiveTime.setText(TimeToolKit.convertTimstampToDefaultTimeZone(rowData.getGet_time2(), "yyyy-MM-dd HH:mm:ss"));
			viewDesc.setText(rowData.getPrice());
			
			return convertView;
		}
	}
	
}
